package com.cuckoo.cuckoo_app2.utils;

import android.webkit.JavascriptInterface;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5Utils {
    /**
     * 计算字符串的MD5哈希值。
     *
     * @param input 待加密的字符串。
     * @return 字符串的MD5哈希值，如果加密失败则返回null。
     */
    @JavascriptInterface
    public String md5(String input) {
        try {
            // 实例化MessageDigest对象，使用MD5算法。
            // 创建一个MessageDigest实例，指定算法为MD5
            MessageDigest md = MessageDigest.getInstance("MD5");

            // 对输入字符串进行MD5加密。
            // 将字符串转换为字节数组，并进行MD5加密
            byte[] messageDigest = md.digest(input.getBytes());

            // 将加密后的字节数组转换为十六进制字符串。
            // 将字节数组转换为十六进制字符串
            StringBuilder hexString = new StringBuilder();
            for (byte b : messageDigest) {
                // 将字节转换为十六进制字符串。
                String hex = Integer.toHexString(0xff & b);

                // 如果十六进制字符串长度为1，则在其前面补0。
                if (hex.length() == 1) {
                    hexString.append('0');
                }
                hexString.append(hex);
            }
            return hexString.toString();
        } catch (NoSuchAlgorithmException e) {
            // 如果加密算法不存在，打印堆栈跟踪并返回null。
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 将字符串转换为MD5的十六进制字符串表示
     *
     * @param input 要转换的字符串
     * @return MD5的十六进制字符串表示
     */
    public String md5DigestAsHex(String input) {
        try {
            // 创建一个MD5 MessageDigest 实例
            MessageDigest md = MessageDigest.getInstance("MD5");

            // 计算字符串的MD5摘要
            md.update(input.getBytes());

            // 获取MD5摘要的字节数组
            byte[] digest = md.digest();

            // 将字节数组转换为十六进制字符串
            StringBuilder hexString = new StringBuilder();
            for (byte b : digest) {
                String hex = Integer.toHexString(0xff & b);
                if(hex.length() == 1) hexString.append('0');
                hexString.append(hex);
            }

            // 返回十六进制字符串
            return hexString.toString();
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        }
    }



}
